package com.wing.user.service;


import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wing.common.utils.JsonResult;
import com.wing.user.model.entity.SystemDingTalkInfo;
import com.wing.user.model.entity.User;

import com.wing.user.model.response.UserAuthVO;
import com.wing.user.model.response.UserVO;
import com.wing.web.excel.UserExcelIn;
import com.wing.web.excel.UserInfoExcelIn;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 系统用户-Service
 *
 * @author
 */
public interface UserService extends IService<User> {

    /**
     * 根据用户名或手机号获取用户
     *
     * @param username
     * @return
     */
    UserAuthVO getByUsername(String username);

    UserAuthVO getByUserOrNickName(String username);

    /**
     * 根据手机号获取用户
     *
     * @param phone
     * @return
     */
    UserAuthVO getByPhone(String phone);

    /**
     * 根据openId获取用户
     *
     * @param openId
     * @return
     */
    UserAuthVO getByOpenId(String openId);

    /**
     * 添加用户
     *
     * @param user
     * @param roleIds
     * @return
     */
    JsonResult addUser(User user, String[] roleIds);

    /**
     * 添加第三方用户
     *
     * @param user     用户信息
     * @return
     */
    void addThirdUser(User user);


    /**
     * 修改用户
     *
     * @param user
     * @param roleIds
     * @return
     */
    JsonResult update(User user, String[] roleIds);

    JsonResult addUserHeader(User user);

    void addFaceData(User user);

    User getByUserId(Long id);

    /**
     * 删除
     *
     * @param userId
     * @return
     */
    JsonResult delete(Long userId);

    /**
     * 通过用户ID获取用户登录token
     *
     * @param userId
     * @return
     */
    JSONObject findByUserId(Long userId, String clientId, String clientSecret, Long cabId, String version, String enterpriseCode);

    /**
     * 通过用户的ic卡获取用户登录token
     *
     * @param icCard
     * @return
     */
    JSONObject findByUserIcCard(String icCard, String clientId, String clientSecret, Long cabId, String version);


    String applogin(String phone, String password, String codeKey);

    UserVO getUserInfoByUserId(Long userId);

    /**
     * 导入
     *
     * @param list
     */
    void importExcel(List<UserExcelIn> list);

    /**
     * 导出
     *
     * @param params
     * @return
     */
    List<UserExcelIn> exportList(Map<String, Object> params);


    Page<User> pageList(Page<User> page, Map<String, Object> params);

    void syncDjUserInfo();

    JsonResult costCenterBodyCount(String type, String startTime, String endTime, String param, Long enterpriseId, String costCenter);

    UserVO getUserInfoByUserName(String userName);

    /**
     * 插入用户信息
     *
     * @param read
     */
    void importExcelUser(List<UserInfoExcelIn> read, String companyNameInfo);

    /**
     * 钉钉用户同步到本地数据库 建立关联
     */
    void syncDingUserToSysUer() throws Exception;

    /**
     * 获取钉钉基础配置信息
     * @return
     */
    SystemDingTalkInfo getUserDingConfigInfo();

    /**
     * 获取对应钉钉用户信息
     * @return
     */
    List<User> selUserDingInfo();
}
